// Package Offer_09__用两个栈实现队列 main
// @Title Offer_09__用两个栈实现队列
// @Description  用两个栈实现队列
// @Author  == 琳琳也叫王木木 ==  2022-01-12 9:43
// @Create  2022-01-12 9:43
package main

/**
第一个栈支持插入操作，第二个栈支持删除操作
*/

type CQueue struct {
	StackAdd []int // 只负责插入
	StackDel []int // 只负责删除
}

func Constructor() CQueue {
	return CQueue{[]int{}, []int{}}
}

// 头部追加
func (this *CQueue) AppendTail(value int) {
	this.StackAdd = append(this.StackAdd, value)
}

// 要删除头部
func (this *CQueue) DeleteHead() int {
	if len(this.StackDel) == 0 {
		for len(this.StackAdd) > 0 {
			// 出栈
			node := this.StackAdd[len(this.StackAdd)-1]
			this.StackAdd = this.StackAdd[:len(this.StackAdd)-1]
			this.StackDel = append(this.StackDel, node)
		}
	}
	if len(this.StackAdd) == 0 && len(this.StackDel) == 0 {
		return -1
	} else {
		temp := this.StackDel[len(this.StackDel)-1]
		this.StackDel = this.StackDel[:len(this.StackDel)-1]
		return temp
	}
}

func main() {

}
